<?php

/**
 * 
 * <b>Classe UsuarioDAO</b>
 * 
 * <p>
 *   Responsável por manipular informações ao banco de dados realizando CRUD
 *   e validando regras de negócio da aplicação
 * </p>
 * 
 * @author     Bruno Pulis <bruno.pulis@gmail.com>
 * @version    1.0
 * @package    Model
 * @subpackage DAO
 * @copyright  2011 Bruno Pulis
 *
 */

/**
 * Require de conexao do banco de dados
 */
require 'ConnectionPDO.php';

class UsuarioDAO extends ConnectionPDO {
	
    public $connection = null;
    
    /**
     * 
     * Método construtor da classe UsuarioDAO, recebe a conexão ao banco de dados
     * 
     */
    public function __construct()
    {
      $this->connection = ConnectionPDO::Connect();
    }

    /**
     * 
     * addUsuario()
	 *
	 * Método responsável por incluir novos registros de usuários
     *
     * @author     Bruno Pulis <bruno.pulis@gmail.com>
     * @param      Usuario $usuario
     * @return     object
     */
    public function addUsuario(Usuario $usuario) {
        try {
            $sql = 'INSERT INTO usuario(Nome,Usuario,Senha,Email) VALUES(?,?,?,?)';
            $rs  = $this->connection->prepare($sql);

            // Parametros recebidos por get
            $rs->bindParam(1, $usuario->getNomeUsuario(), PDO::PARAM_STR, 50);
            $rs->bindParam(2, $usuario->getUsuario(), PDO::PARAM_STR, 25);
            $rs->bindParam(3, $usuario->getSenhaUsuario(), PDO::PARAM_STR, 32);
            $rs->bindParam(4, $usuario->getEmailUsuario(), PDO::PARAM_STR, 100);
            $rs->execute();
        } catch (PDOException $e) {
           echo 'Erro <code>' .  $e->getMessage() . '</code>';
        }
    }

    /**
     * getAllUsuario()
     * 
     * Metodo responsavel por listar todos registros relacionados aos usuários
     *
     * @author     Bruno Pulis <bruno.pulis@gmail.com>
     * @access	   public	
     */
    public function getAllUsuario()
    {
        try {
            $sql = 'SELECT IDUsuario,nome,usuario,email FROM usuario';
            return $rs  = $this->connection->query($sql);
          
          
        } catch (PDOException $e) {
            $this->connection->rollBack();
            echo 'Erro <code>' .  $e->getMessage() . '</code>';
        }
    }

    /**
     * 
     * getByIDUsuario()
     * 
     * Metodo responsavel por listar registros de acordo com seu identificador.
     * 
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     * @access public
     * @param  $idUsuario
     * @return $idUsuario int
     */
    public function getByIDUsuario($idUsuario) {
        try {
            $sql   = 'SELECT 
            			nome,
            			usuario,
            			senha,
            			email 
            	      FROM usuario 
            	      WHERE IDUsuario = ?';
            
            $stmt  = $this->connection->prepare($sql);
            if ($stmt->execute(array($idUsuario)))
            {
              while ($linha = $stmt->fetch())
              {
                $values = new Usuario();
                $values->setNomeUsuario($linha['nome']);
                $values->setUsuario($linha['usuario']);
                $values->setSenhaUsuario($linha['senha']);
                $values->setEmailUsuario($linha['email']);
              }
            }
            return $values;
        } catch (PDOException $e) {
            echo 'Erro <code>' .  $e->getMessage() . '</code>';
        }
    }

    /**
     * updateUsuario()
     * 
     * Método responsável por atualizar registros
     * 
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     * @access public
     * @param  Usuario $usuario
     * @return Object
     */
    public function updateUsuario(Usuario $usuario) {
        try {
          $sql = 'UPDATE usuario
                  SET
                    nome    = ?,
                    usuario = ?,
                    senha   = ?,
                    email   = ?
                  WHERE IDUsuario  = ?';

            $stmt = $this->connection->prepare($sql);
            
            $stmt->bindValue(1, $usuario->getNomeUsuario());
            $stmt->bindValue(2, $usuario->getUsuario());
            $stmt->bindValue(3, $usuario->getSenhaUsuario());
            $stmt->bindValue(4, $usuario->getEmailUsuario());
            $stmt->bindValue(5, $usuario->getIdUsuario());
            
            $stmt->execute();
        } catch (PDOException $e) {
            echo 'Erro <code>' .  $e->getMessage() . '</code>';
        }
    }

    /**
     * deleteUsuario()
     * 
     * Método responsável por atualizar registros
     * 
     * @author Bruno Pulis <bruno.pulis@gmail.com>
     * @access public
     * @param  Usuario $usuario
     * @return Object
     */
    public function deleteUsuario(Usuario $usuario)
    {
        try {
            $sql = 'DELETE FROM usuario WHERE IDUsuario = ?';
            $db = $this->connection->prepare($sql);
            $db->bindParam(1, $usuario->getIdUsuario(), PDO::PARAM_INT);
            $db->execute();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
    }
}